home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / graphics / vlib205 / dialogs.c < prev    next >
C/C++ Source or Header  |  1994-02-17  |  11KB  |  401 lines

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include "visualib.h"
  4. #include "vlibdemo.h"
  5. #include "dialogs.h"
  6.  
  7. extern HINSTANCE    hInst;
  8. static POINT3D    p3;
  9. static POINT2D    p2;
  10.  
  11. BINARY _export DlgInputPoint3D (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  12. {
  13.     char    buf[20];
  14.     REAL    x;
  15.  
  16.     switch (msg) {
  17.         case WM_INITDIALOG:
  18.             sprintf (buf, "%.3f", (REAL) p3.x);
  19.             SetDlgItemText (hdlg, XCOORD, buf);
  20.             sprintf (buf, "%.3f", (REAL) p3.y);
  21.             SetDlgItemText (hdlg, YCOORD, buf);
  22.             sprintf (buf, "%.3f", (REAL) p3.z);
  23.             SetDlgItemText (hdlg, ZCOORD, buf);
  24.             return (TRUE);
  25.         case WM_COMMAND:
  26.             switch (wp) {
  27.                 case IDOK:
  28.                     GetDlgItemText (hdlg, XCOORD, buf, 20);
  29.                     if (sscanf (buf, "%f", &x))
  30.                         p3.x = x;
  31.                     GetDlgItemText (hdlg, YCOORD, buf, 20);
  32.                     if (sscanf (buf, "%f", &x))
  33.                         p3.y = x;
  34.                     GetDlgItemText (hdlg, ZCOORD, buf, 20);
  35.                     if (sscanf (buf, "%f", &x))
  36.                         p3.z = x;
  37.                     EndDialog (hdlg, TRUE);
  38.                     return (TRUE);
  39.  
  40.                 case IDCANCEL:
  41.                     EndDialog (hdlg, TRUE);
  42.                     break;
  43.             }
  44.             break;
  45.     }
  46.     return (FALSE);                  /* Didn't process a message    */
  47. }
  48.  
  49. BINARY    InputPoint3D (LPPOINT3D p)
  50. {
  51.     BOOL    flag;
  52.     
  53.     p3 = *p;
  54.     flag = DialogBox (hInst, MAKEINTRESOURCE(DLGSETPOINT3D), NULL, DlgInputPoint3D) > 0;
  55.     if (flag)
  56.         *p = p3;
  57.     return (flag);
  58. }
  59.  
  60. BINARY _export DlgInputPoint2D (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  61. {
  62.     char    buf[20];
  63.     REAL    x;
  64.  
  65.     switch (msg) {
  66.         case WM_INITDIALOG:
  67.             sprintf (buf, "%.3f", (REAL) p2.x);
  68.             SetDlgItemText (hdlg, XCOORD, buf);
  69.             sprintf (buf, "%.3f", (REAL) p2.y);
  70.             SetDlgItemText (hdlg, YCOORD, buf);
  71.             return (TRUE);
  72.         case WM_COMMAND:
  73.             switch (wp) {
  74.                 case IDOK:
  75.                     GetDlgItemText (hdlg, XCOORD, buf, 20);
  76.                     if (sscanf (buf, "%f", &x))
  77.                         p2.x = x;
  78.                     GetDlgItemText (hdlg, YCOORD, buf, 20);
  79.                     if (sscanf (buf, "%f", &x))
  80.                         p2.y = x;
  81.                     EndDialog (hdlg, TRUE);
  82.                     return (TRUE);
  83.  
  84.                 case IDCANCEL:
  85.                     EndDialog (hdlg, TRUE);
  86.                     break;
  87.             }
  88.             break;
  89.     }
  90.     return (FALSE);                  /* Didn't process a message    */
  91. }
  92.  
  93. BINARY    InputPoint2D (LPPOINT2D p)
  94. {
  95.     BOOL    flag;
  96.     
  97.     p2 = *p;
  98.     flag = DialogBox (hInst, MAKEINTRESOURCE(DLGSETPOINT2D), NULL, DlgInputPoint2D) > 0;
  99.     if (flag)
  100.         *p = p2;
  101.     return (flag);
  102. }
  103.  
  104. BINARY    DlgLightSetup (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  105. {
  106.     char    buf[20];
  107.     REAL    x;
  108.     int lighton;
  109.     COLORREF color;
  110.     VECTOR3 loc, dir;
  111.  
  112.     switch (msg) {
  113.         case WM_INITDIALOG:
  114.             ShadingParameter (VL_CURRENT, VL_LIGHTLOCATION, TRUE, loc);
  115.             ShadingParameter (VL_CURRENT, VL_LIGHTDIRECTION, TRUE, dir);
  116.             lighton = SwitchLight (VL_CURRENT, VL_INQUIRE);
  117.             
  118.             sprintf (buf, "%.3f", (REAL) loc[0]);
  119.             SetDlgItemText (hdlg, LIGHTLOCX, buf);
  120.             sprintf (buf, "%.3f", (REAL) loc[1]);
  121.             SetDlgItemText (hdlg, LIGHTLOCY, buf);
  122.             sprintf (buf, "%.3f", (REAL) loc[2]);
  123.             SetDlgItemText (hdlg, LIGHTLOCZ, buf);
  124.             
  125.             sprintf (buf, "%.3f", (REAL) dir[0]);
  126.             SetDlgItemText (hdlg, LIGHTDIRX, buf);
  127.             sprintf (buf, "%.3f", (REAL) dir[1]);
  128.             SetDlgItemText (hdlg, LIGHTDIRY, buf);
  129.             sprintf (buf, "%.3f", (REAL) dir[2]);
  130.             SetDlgItemText (hdlg, LIGHTDIRZ, buf);
  131.  
  132.             CheckDlgButton (hdlg, LIGHTON, lighton);
  133.             
  134.             return (TRUE);
  135.         case WM_COMMAND:
  136.             switch (wp) {
  137.                 case LIGHTCOLOR:
  138.                     color = ShadingColor
  139.                         (VL_CURRENT, VL_LIGHTCOLOR, VL_INQUIRE);
  140.                     color = SelectColor (color);
  141.                     ShadingColor (VL_CURRENT, VL_LIGHTCOLOR, color);
  142.                     return (TRUE);
  143.             
  144.                 case IDOK:
  145.                     GetDlgItemText (hdlg, LIGHTLOCX, buf, 20);
  146.                     if (sscanf (buf, "%f", &x))
  147.                         loc[0] = x;
  148.                     GetDlgItemText (hdlg, LIGHTLOCY, buf, 20);
  149.                     if (sscanf (buf, "%f", &x))
  150.                         loc[1] = x;
  151.                     GetDlgItemText (hdlg, LIGHTLOCZ, buf, 20);
  152.                     if (sscanf (buf, "%f", &x))
  153.                         loc[2] = x;
  154.                     
  155.                     GetDlgItemText (hdlg, LIGHTDIRX, buf, 20);
  156.                     if (sscanf (buf, "%f", &x))
  157.                         dir[0] = x;
  158.                     GetDlgItemText (hdlg, LIGHTDIRY, buf, 20);
  159.                     if (sscanf (buf, "%f", &x))
  160.                         dir[1] = x;
  161.                     GetDlgItemText (hdlg, LIGHTDIRZ, buf, 20);
  162.                     if (sscanf (buf, "%f", &x))
  163.                         dir[2] = x;
  164.                     
  165.                     lighton = IsDlgButtonChecked (hdlg, LIGHTON);
  166.                     
  167.                     ShadingParameter (VL_CURRENT, VL_LIGHTLOCATION, FALSE, loc);
  168.                     ShadingParameter (VL_CURRENT, VL_LIGHTDIRECTION, FALSE, dir);
  169.                     SwitchLight (VL_CURRENT, lighton);
  170.                     
  171.                     EndDialog (hdlg, TRUE);
  172.                     return (TRUE);
  173.  
  174.                 case IDCANCEL:
  175.                     EndDialog (hdlg, TRUE);
  176.                     break;
  177.             }
  178.             break;
  179.     }
  180.     return (FALSE);                  /* Didn't process a message    */
  181. }
  182.  
  183.  
  184. BINARY DlgMaterial (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  185. {
  186.     COLORREF color;
  187.     
  188.     switch (msg) {
  189.         case WM_INITDIALOG:
  190.             return (TRUE);
  191.             
  192.         case WM_COMMAND:
  193.             switch (wp) {
  194.                 case MATDIFFUSE:
  195.                     color = ShadingColor
  196.                         (VL_CURRENT, VL_MATERIALDIFFUSE, VL_INQUIRE);
  197.                     color = SelectColor (color);
  198.                     ShadingColor (VL_CURRENT, VL_MATERIALDIFFUSE, color);
  199.                     return (TRUE);
  200.                 case MATAMBIENT:
  201.                     color = ShadingColor
  202.                         (VL_CURRENT, VL_MATERIALAMBIENT, VL_INQUIRE);
  203.                     color = SelectColor (color);
  204.                     ShadingColor (VL_CURRENT, VL_MATERIALAMBIENT, color);
  205.                     return (TRUE);
  206.                 case MATSPECULAR:
  207.                     color = ShadingColor
  208.                         (VL_CURRENT, VL_MATERIALSPECULAR, VL_INQUIRE);
  209.                     color = SelectColor (color);
  210.                     ShadingColor (VL_CURRENT, VL_MATERIALSPECULAR, color);
  211.                     return (TRUE);
  212.                 case MATEMISSION:
  213.                     color = ShadingColor
  214.                         (VL_CURRENT, VL_MATERIALEMISSION, VL_INQUIRE);
  215.                     color = SelectColor (color);
  216.                     ShadingColor (VL_CURRENT, VL_MATERIALEMISSION, color);
  217.                     return (TRUE);
  218.             
  219.                 case IDOK:
  220.                     EndDialog (hdlg, TRUE);
  221.                     return (TRUE);
  222.  
  223.                 case IDCANCEL:
  224.                     EndDialog (hdlg, TRUE);
  225.                     break;
  226.             }
  227.             break;
  228.     }
  229.     return (FALSE);                  /* Didn't process a message    */
  230. }
  231.  
  232.  
  233. BINARY    DlgTexture (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  234. {
  235.     static int texture = TEXTURENONE;
  236.     static int check1, check2, check3, check4;
  237.     
  238.     switch (msg) {
  239.         case WM_INITDIALOG:
  240.             CheckRadioButton (hdlg, TEXTURENONE, TEXTUREGRANITE, texture);
  241.             check1 = ShadingOption(VL_CURRENT,VL_PERTURBMATERIAL,VL_INQUIRE);
  242.             CheckDlgButton (hdlg, IDC_CHECK1, check1);
  243.             check2 = ShadingOption(VL_CURRENT,VL_PERTURBNORMAL,VL_INQUIRE);
  244.             CheckDlgButton (hdlg, IDC_CHECK2, check2);
  245.             check3 = ShadingOption(VL_CURRENT,VL_PERTURBPIXEL,VL_INQUIRE);
  246.             CheckDlgButton (hdlg, IDC_CHECK3, check3);
  247.             check4 = ShadingOption(VL_CURRENT,VL_PERTURBFACET,VL_INQUIRE);
  248.             CheckDlgButton (hdlg, IDC_CHECK4, check4);
  249.             return (TRUE);
  250.             
  251.         case WM_COMMAND:
  252.             switch (wp) {
  253.                 case TEXTURENONE:
  254.                 case TEXTUREMARBLE:
  255.                 case TEXTUREWOOD:
  256.                 case TEXTUREGRANITE:
  257.                     texture = wp;
  258.                     CheckRadioButton (hdlg, TEXTURENONE, TEXTUREWOOD, wp);
  259.                     return (TRUE);
  260.                 case IDC_CHECK1:
  261.                     check1 = !check1;
  262.                     CheckDlgButton (hdlg, IDC_CHECK1, check1);
  263.                     break;
  264.                 case IDC_CHECK2:
  265.                     check2 = !check2;
  266.                     CheckDlgButton (hdlg, IDC_CHECK2, check2);
  267.                     break;
  268.                 case IDC_CHECK3:
  269.                     check3 = !check3;
  270.                     CheckDlgButton (hdlg, IDC_CHECK3, check3);
  271.                     break;
  272.                 case IDC_CHECK4:
  273.                     check4 = !check4;
  274.                     CheckDlgButton (hdlg, IDC_CHECK4, check4);
  275.                     break;
  276.                 case IDOK:
  277.                     switch (texture) {
  278.                         case TEXTUREMARBLE:
  279.                             SolidTexture (VL_MARBLE);
  280.                             break;
  281.                         case TEXTUREWOOD:
  282.                             SolidTexture (VL_WOODGRAIN);
  283.                             break;
  284.                         case TEXTUREGRANITE:
  285.                             SolidTexture (VL_GRANITE);
  286.                             break;
  287.                         default:
  288.                             SolidTexture (VL_NONE);
  289.                             break;
  290.                     }
  291.                     ShadingOption(VL_CURRENT,VL_PERTURBMATERIAL,check1);
  292.                     ShadingOption(VL_CURRENT,VL_PERTURBNORMAL,check2);
  293.                     ShadingOption(VL_CURRENT,VL_PERTURBPIXEL,check3);
  294.                     ShadingOption(VL_CURRENT,VL_PERTURBFACET,check4);
  295.                     EndDialog (hdlg, TRUE);
  296.                     return (TRUE);
  297.  
  298.                 case IDCANCEL:
  299.                     EndDialog (hdlg, TRUE);
  300.                     break;
  301.             }
  302.             break;
  303.     }
  304.     return (FALSE);                  /* Didn't process a message    */
  305. }
  306.  
  307. BINARY DlgShading (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  308. {
  309.     static int mode, mbutton;
  310.     
  311.     switch (msg) {
  312.         case WM_INITDIALOG:
  313.             mode = ShadingOption (VL_CURRENT, VL_SHADINGMETHOD, VL_INQUIRE);
  314.             switch (mode){
  315.                 case VL_WIREFRAME:
  316.                     mbutton = WIREFRAME;
  317.                     break;
  318.                 case VL_SOLIDFILL:
  319.                     mbutton = SOLIDFILL;
  320.                     break;
  321.                 case VL_FLATSHADE:
  322.                     mbutton = FLATSHADING;
  323.                     break;
  324.                 case VL_GOURAUDSHADE:
  325.                     mbutton = GOURAUD;
  326.                     break;
  327.                 case VL_PHONGSHADE:
  328.                     mbutton = PHONG;
  329.                     break;
  330.                 case VL_SPECULARMODEL:
  331.                     break;
  332.             }
  333.             CheckRadioButton (hdlg, WIREFRAME, SPECULAR, mbutton);
  334.             
  335.             CheckDlgButton (hdlg, DEPTHBUFFER,
  336.                 ShadingOption (VL_CURRENT, VL_DEPTHBUFFER, VL_INQUIRE));
  337.             CheckDlgButton (hdlg, LOCALVIEWER,
  338.                 ShadingOption (VL_CURRENT, VL_LOCALVIEWER, VL_INQUIRE));
  339.             CheckDlgButton (hdlg, TWOSIDE,
  340.                 ShadingOption (VL_CURRENT, VL_TWOSIDESHADE, VL_INQUIRE));
  341.             CheckDlgButton (hdlg, BACKFACEREM,
  342.                 ShadingOption (VL_CURRENT, VL_BACKFACEREMOVAL, VL_INQUIRE));
  343.  
  344.             return (TRUE);
  345.             
  346.         case WM_COMMAND:
  347.             switch (wp) {
  348.                 case WIREFRAME:
  349.                 case SOLIDFILL:
  350.                 case FLATSHADING:
  351.                 case GOURAUD:
  352.                 case PHONG:
  353.                 case SPECULAR:
  354.                     mbutton = wp;
  355.                     CheckRadioButton (hdlg, WIREFRAME, SPECULAR, wp);
  356.                     return (TRUE);
  357.             
  358.                 case IDOK:
  359.                     switch (mbutton) {
  360.                         case WIREFRAME:
  361.                             mode = VL_WIREFRAME;
  362.                             break;
  363.                         case SOLIDFILL:
  364.                             mode = VL_SOLIDFILL;
  365.                             break;
  366.                         case FLATSHADING:
  367.                             mode = VL_FLATSHADE;
  368.                             break;
  369.                         case GOURAUD:
  370.                             mode = VL_GOURAUDSHADE;
  371.                             break;
  372.                         case PHONG:
  373.                             mode = VL_PHONGSHADE;
  374.                             break;
  375.                         case SPECULAR:
  376.                             mode = VL_PHONGSHADE;
  377.                             break;
  378.                     }
  379.                     ShadingOption (VL_CURRENT, VL_SHADINGMETHOD, mode);
  380.                     
  381.                     ShadingOption (VL_CURRENT, VL_DEPTHBUFFER,
  382.                         IsDlgButtonChecked (hdlg, DEPTHBUFFER));
  383.                     ShadingOption (VL_CURRENT, VL_LOCALVIEWER,
  384.                         IsDlgButtonChecked (hdlg, LOCALVIEWER));
  385.                     ShadingOption (VL_CURRENT, VL_TWOSIDESHADE,
  386.                         IsDlgButtonChecked (hdlg, TWOSIDE));
  387.                     ShadingOption (VL_CURRENT, VL_BACKFACEREMOVAL,
  388.                         IsDlgButtonChecked (hdlg, BACKFACEREM));
  389.  
  390.                     EndDialog (hdlg, TRUE);
  391.                     return (TRUE);
  392.  
  393.                 case IDCANCEL:
  394.                     EndDialog (hdlg, TRUE);
  395.                     break;
  396.             }
  397.             break;
  398.     }
  399.     return (FALSE);                  /* Didn't process a message    */
  400. }
  401.